/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tramite.beans;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.cip.esymons.general.be.Empleado;
import org.cip.esymons.general.be.PersonaNatural;
import org.cip.esymons.tramite.bc.AreaDelegate;
import org.cip.esymons.tramite.bc.EmpleadoDelegate;
import org.cip.esymons.tramite.bc.ProcedimientoDelegate;
import org.cip.esymons.tramite.bc.ResponsableProcDelegate;
import org.cip.esymons.tramite.be.Procedimiento;
import org.cip.esymons.tramite.be.ResponsableProc;

/**
 *
 * @author ChristianATE
 */
public class ProcedimientoController {
    
    private ProcedimientoDelegate delegado;
    private Procedimiento procedimiento;
    private EmpleadoDelegate empleadoDelegado;
    private AreaDelegate areaDelegado;
    private ResponsableProcDelegate responsableDelegado;
    private List<Procedimiento> procedimientos;
    private List<PersonaNatural> personas;
    private List<PersonaNatural> personasAgregadas;
    private String desc;
    private int areaSeleccionada;    

    public ProcedimientoController() {
        delegado = new ProcedimientoDelegate();
        desc = "";        
        empleadoDelegado = new EmpleadoDelegate();
        areaDelegado = new AreaDelegate();
        responsableDelegado = new ResponsableProcDelegate();
        procedimientos = new ArrayList<Procedimiento>();
        personas = new ArrayList<PersonaNatural>();
        personasAgregadas = new ArrayList<PersonaNatural>();
        listarProcedimientos();
    }

    public int getAreaSeleccionada() {
        return areaSeleccionada;
    }

    public void setAreaSeleccionada(int areaSeleccionada) {
        this.areaSeleccionada = areaSeleccionada;
    }

    public String listar() {
        try {
            setPersonas(empleadoDelegado.listarPersonaXArea(areaSeleccionada));
        } catch (Exception e) {
            personas = new ArrayList<PersonaNatural>();
        }
        return "";
    }

    public List<PersonaNatural> getPersonas() {
        return personas;
    }

    public void setPersonas(List<PersonaNatural> personas) {
        this.personas = personas;
    }

    public String getAreaNombre() {
        if (areaSeleccionada > 0) {
            return areaDelegado.find(areaSeleccionada).getAreNombre();
        }
        return " ";
    }

    public String agregarESeleccionados() {
        try {
            for (PersonaNatural emp : personas) {
                if (emp.getSeleccionado()) {
                    emp.setSeleccionado(false);
                    personasAgregadas.add(emp);
                }
            }
            for (PersonaNatural emp : personasAgregadas) {
                personas.remove(emp);
            }            
        } catch (Exception e) {
        }
        return "";
    }

    public String agregarETodos() {
        try {
            for (PersonaNatural per : personas) {
                per.setSeleccionado(false);
                personasAgregadas.add(per);
            }
            personas.clear();            
        } catch (Exception e) {
        }
        return "";
    }

    public String quitarETodos() {
        try {
            personasAgregadas.clear();
            personas.clear();
            listar();
        } catch (Exception e) {
        }
        return "";
    }

    public String quitarESeleccionados() {
        try {
            for (PersonaNatural per : personasAgregadas) {
                if (per.getSeleccionado()) {
                    per.setSeleccionado(false);
                    personas.add(per);
                }
            }
            for (PersonaNatural per : personas) {
                personasAgregadas.remove(per);
            }            
        } catch (Exception e) {
        }
        return "";
    }

    public List<PersonaNatural> getPersonasAgregadas() {
        return personasAgregadas;
    }

    public void setPersonasAgregadas(List<PersonaNatural> personasAgregadas) {
        this.personasAgregadas = personasAgregadas;
    }

    public Procedimiento getProcedimiento() {
        return procedimiento;
    }

    public void setProcedimiento(Procedimiento procedimiento) {
        this.procedimiento = procedimiento;
    }

    private void listarProcedimientos() {
        procedimientos = delegado.buscarPorNombre(getDesc());
    }

    /**
     * @return the procedimientos
     */
    public List<Procedimiento> getProcedimientos() {
        return procedimientos;
    }

    /**
     * @param procedimientos the procedimientos to set
     */
    public void setProcedimientos(List<Procedimiento> procedimientos) {
        this.procedimientos = procedimientos;
    }

    /**
     * @return the desc
     */
    public String getDesc() {
        return desc;
    }

    /**
     * @param desc the desc to set
     */
    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String nuevo() {
        procedimiento = new Procedimiento();
        return "nuevo";
    }

    public String grabar() {
        delegado.create(procedimiento);
        grabarEmpleados();        
        return "buscar";
    }

    public void grabarEmpleados() {
//        for (PersonaNatural per : personasAgregadas) {
//            responsableDelegado.create(new ResponsableProc(new Date(), true, new Empleado(per.getSolCodigo()), procedimiento));
//        }
    }

    public String buscar() {
        listarProcedimientos();
        return null;
    }

    public String actualizar() {
        delegado.edit(procedimiento);        
        return "buscar";
    }

    public Procedimiento buscarXId(Long id){
        try{
        return delegado.find(id);
        }catch(Exception e){
            return null;
        }
    }
}
